マルチブートの仕方(フリーツール編)
ブートローダは、そもそもたった446bytesのIBMオリジナルブートストラップローダから発しているので、決して複雑で難しいプログラムではない。従ってフリーのものが今までも沢山作られてきたし、今でも沢山ある。そういった流れがあるせいか、実際は様々な機能を追加して、非常に複雑になったものでも、依然フリーで提供されることが多い。従ってフリーのブートローダでも、いろいろなことを実現する上で、殆ど不都合はない。私は調査のためにいくつか市販品やシェアウェアなども入手しているが、実際の自分の環境はフリーのローダだべて賄っている。
機能によっては、市販品になくて、フリーツールにあるというものも腐るほどある。はっきり言って、特殊な用途でない限り、フリーのブートローダで十分だ。ブートローダに金なんて出してはいけない。ただし、優れたツールをフリーで公開して下さっている、作者の皆様には感謝しなければいけない。
ここでは特にその中でも、「本当にフリーでいいの?」と思える程の優れたフリーのブートローダ達を紹介していきたいと思う。
定型的なチェーンローダだが、MBMはフリーソフトでありながら、ブートローダとして必要な項目は、ほぼ全て満足のいくレベルでクリアしている。論理領域起動がR0.34からできるようになったので完璧に近い仕上がりとなった。
隠しパーティションに関しても、グループに分けて自動的に他グループパーティションを隠しパーティションにする機能もあり、通常の用途なら全く不足はない。第2ハードディスク以降からのMSのOSの起動も数少ない完璧に動作するツールの一つとなっている。更に殆どのブートローダが対応していない「電源断機能」まである。
パーティションの選択方法は、メニューをカーソルキーで選べるタイプだ。メニューの表示パーティション、表示ラベルもカスタマイズでき、更には後述するようにグラフィックメニューもオプションで導入できるので、大変グッドである。更にこの場合PS/2マウスも使えるので全く申し分ない。
インストールも、DOSからコマンド一つで行える。一応Windows9xのDOS窓でも可能だが、起動ディスクから行った方がいいだろう。またDOSのない環境の人でも導入できるように、導入ディスクをイメージ化したものも配布されており、UNIXオンリーユーザにはありがたいことである。具体的なインストールの方法や実際の詳しい使い方はツールのReadmeなどを読んでもらばいいのだが、使い方はここでもポイントを簡単に説明する。
インストールが済んだら、早速パソコンを起動する。MBMが読み込まれると、まず以下のような画面が表示される。OSの選択は勿論、あらゆるMBMの設定はこの画面で行う。右の方にヘルプ(操作の凡例)が表示されるので、あまり迷うことはないだろう。
[MBM起動メニュー]
|
第2ハードディスク以降も含め、認識した全ての有効なパーティションが表示され、選択起動可能になる。上記の例では、第1ハードディスク(#0)にFAT32の基本領域、拡張領域、NTFSの基本領域の3つの領域が、第2ハードディスク(#1)にLinux nativeの基本領域とLinux Swap領域の2つの領域を認識している。因みにハードディスクが一つの場合、「#n:」の部分は表示されない。最後にフロッピーディスク起動用の「Diskette」というメニューもあり、このメニューからFD起動も可能である。
「数字」キーまたは「↑↓」キーで目的のパーティションを選択して、「Enter」キーまたは「Ctrl-M」キーでそのOSが起動する。
拡張領域(ID 0x05、0x0F、0x85)には名称の前に「+」が表示されていて、その内部に項目があることを示している。この項目を選択して、「→」キーを押すと、下記のように、その拡張領域の中の論理領域が展開表示される。
[拡張領域の展開表示]
|
ここで、論理領域を選択して起動することも可能だ。「←」キーは論理領域の表示を非表示(収縮、縮退)にする。複数のハードディスクが表示されていて、メニュー上に複数の拡張領域がある場合、この複数の拡張領域を同時に展開表示することはできなので、別の拡張領域を展開する時は、展開中の拡張領域を収縮する。起動時は論理領域がデフォルト設定されていない限り、収縮状態で表示されているので、その場合、論理領域の表示は必ず上記操作が必要になる。
冗長なメニューの削除(非表示)や、表示文言の変更などができる。各メニューを選択して、「F2」キーまたは「R」キーで文言を変更する。上記例では、先頭のFAT32にはWindows98がインストールされているとして、ここを「Windows98」としてみよう。また3番目は、Windows2000がインストールされているので、例えば「Windows2000」とする。そして非表示にしたいメニューはメニュー文言の先頭に「*」を付けます。例では拡張領域とLinuxSwap領域からは起動する予定がないので、メニューから削除するために先頭に「*」を付けてみる。
[表示のカスタマイズ]
|
このように変更すると、次回の起動から(または「Del」で起動し直すと)、次のような分かりやすい、すっきりしたメニューになる。
[表示カスタマイズ後の起動メニュー]
|
ただしメニュー項目名と対応するパーティションとの関係は、ディスクメンテナンスなどで食い違いが生じることがある。パーティションの切りなおしやパーティションテーブル上の順番変更、ドライブの交換などで起きる。
そのような状態になった場合は、「F9」キーで全ドライブのパーティションを再チェックしてメニュー項目名をそれに合わせて再設定することができる。これはMBMを再インストールするのと同じで、メニュー項目名はパーティションの種別名で初期化される。面倒でなければ 「F2」キーでそれぞれのメニュー項目を実際の対応に合うように書き換えても良いだろう。
MBMでは、インストール直後は選択起動するまで、いつまでもOSの起動はしない。「F3」キーまたは「T」キーでタイムアウト時間の設定を行うと、その時間が経過するとデフォルト起動項目が選択、起動される。初期状態では、前回の起動項目がデフォルト起動項目になる。
特定の項目を常にデフォルト起動項目にしたい場合は、 「スペース」キーで、その項目をデフォルト起動項目に固定できる。固定されたデフォルト起動項目は、先頭に「*」(アスタリスク)が付く。
「F1」キーまたは「H」キーで右のヘルプを表示/非表示を切り替えることができる。
「F4」キーまたは「V」キーを押すと以下のような詳細(Verbose)モードを表示する。詳細モードは各パーティションの[アクティブ状態、ブートモード、マスク状態、自動マスクグループ]
パーティションサイズ パーティションIDが表示される。
[詳細(Verbose)表示]
|
「アクティブ状態」は言うまでもなく、そのパーティションが現在アクティブか否かを示し、アクティブである場合「a」となっており、アクティブでない場合は、「-」と表示される。あまりやる必要はないかもしれないが、「F5」キーまたは「A」キーでこの場で、アクティブと非アクティブを切り替えることができる。
「ブートモード」とは以下の3つの値があり、「F6」キーまたは「B」キーで設定する。通常は特に設定する必要はない。設定しない場合はそのエントリを起動すると、そのパーティションをアクティブにすると共に、全ての(接続された他のハードディスクドライブも含めて)他のパーティションを非アクティブにする。値の意味は以下のようになる。
>=1 他のハードディスクドライブのアクティブ設定はクリアしない。
>=2 ブートヘルパーコード(*1)をインストールしない。
==3 アクティブ設定は一切変更しない。
ブートヘルパーコード:第2ハードディスク以降のMicrosoftのOSを起動する際にインストールされるドライブ番号スワップ用コードなのだが、要は第2ハードディスク以降からMicrosoftのOSを起動するときは、この値を2未満(つまりは1か-)にすべきということである。
「マスク状態」とは、そのパーティションのパーティションタイプがマスクされているかを否かを示す。マスクとは隠しパーティションのことで、マスクされた(隠された)パーティションの場合 「m」 が表示され、そうでない場合、「-」と表示される。マスク状態を変更したい場合、そのパーティションにカーソルを合わせて「F7」キーまたは「M」キーで手動で変更できる。
「自動マスクグループ」とは、起動時に自動的にマスク・マスク解除を行うパーティショングループだ。「1」から「3」の3グループにセットすることができる。あるグループのパーティションが起動されると、同一グループのパーティションは全てマスクが解除され、他のグループのパーティションは全てマスクされる。 自動マスクグループに所属していないパーティションのマスク状態には影響を与えない。設定は「F8」キーまたは「K」キーで行う。また論理領域は自動マスクグループに所属させることはできない。
尚、Windows 2000に対しては、隠しパーティションの機能が一切効かないので、隠したいNTFSなどがあっても、通常は隠すことができない。Windows 2000は既存のNTFSパーティションを全て、新しいNTFS5パーティションに変えてしまう。そのため、このNTFS5パーティションを認識できないWindows NT 4.0 SP3以前がNTFSパーティションにインストールされていると、Windows 2000をインストール後、NTが起動できなくなるという問題がある。この場合パーティションを隠しても一切効果がない。
しかしMBMは、かなり荒業を使って、NTFSパーティションを隠す機能を持っている。具体的にはブートセクターをビット反転してしまって、Windows 2000から一切パーティション情報が分からないようにしてしまうというものである。従って非常に危険な機能でもあるので、標準機能としてはサポートしていない。別バージョンとして用意してある。このことが何を言っているのか分からない人は、絶対に使わないでほしい。意味のわかる人で、上記Windows 2000の動作に困っている人は、この別バージョン(R0.361)がMBMのホームページから辿れるので入手してほしい。
更にこのツールの良いところは、簡単なものだが、区画エディタと呼ばれるパーティション編集機能があることだ。以前はインストールにつかうMBM.COMというプログラムのオプション機能だったのだが、R0.33cからローダに組み込まれたのでパーティション選択画面からでも、「F10」キーで呼び出すことができるようになった。
[MBM区画エディタ]
パーティションの作成、消去、サイズの変更、パーティションタイプの変更、アクティブ属性の変更などが可能である。基本的にはFDISKの機能を拡張したようなつくりなので、Partition Magicなどのようにデータを保持したままの変更などは当然できないが、WindowsのFDISKでは不可能な複数の基本領域の作成、FAT系以外の取り扱いが可能なので重宝する。バージョン0.37から論理領域もサポートされるようになったので大変便利だ。
また、何らかの事故でパーティション情報が不正なものになると、WindowsのFDISKなどは起動すらしなくなってしまうことがある。またOSのインストールなども、進めることができなくなってしまう場合がある。このような時にパーティションの情報をまっさらにしてしまうために使うこともできる。私は結構こういう場面で重宝した。
「Del」キーは、これは単なるMBMの再起動ではなくて、BIOSに対してOSのブート失敗通知を行う。これはBIOSコールの「INT 19h」というもので、これを受けたBIOSは、ある程度その仕様にもよるのだが、通常はブート手順のやり直しを行う。
これがどういう利点を提供するかというと、例えばCD-ROM起動などで、何かのキーを押さないとCD-ROM起動をしないようなブータブルCDがある。そのためキーを押し忘れてCD-ROM起動せず、ハードディスク起動になってしまった場合にMBMからもう一度CD-ROM起動をやり直させる、といった場面で活用できる。
最後に「End」キーだが、これはメニューから電源断ができる。マシンがAPMに対応している必要があるが、あまりこの機能を持ったブートローダは無いのですごい。ノートPCユーザの場合、重宝する場合があるだろう。
まあこれだけでも、使い勝手的には全く問題ないのだが、このツールの良さは、更にグラフィックなメニューを導入できることである。以下のような起動画面をカスタマイズすることができる。私はこれがこのツールの一つの目玉機能だと思っている。
具体的な導入方法はツールの説明書を読んでもらいたいのだが、自分の好きな画像を使うことも勿論できる。市販ツールといえども起動画面に自分の好きな画像を使えるものは少ない。こういった遊び心を具現化できるあたりが、フリーソフトのある意味いいところだと思う。市販ツールだとどうしても実用一点張りになる傾向があるからね。
OSの選択方法は、テキストメニューと同じ操作も可能だが、このグラフィックメニューではPS/2マウスを使うこともできる。選択すると画像がフェードアウトするあたりも、非常ににくい演出である。その上、このフェードアウト方法も多少カスタマイズできる。
このグラフィックメニューが表示されているときに「ESC」キーを押すと、元のテキストメニューが表示される。各種設定や論理領域起動などはグラフィックメニューではできないので、設定などを行う場合に、テキストメニューに戻る必要があるからである。
ところでこのツール、これだけの機能を持ちながら、パーティションの借用なしにどうやっているのだろうと思った方はいないだろうか? MBRのブートプログラム用の領域446bytesに収まるような小さなプログラムサイズで、これが全て可能なのだろうか? 実はこのツールはパーティションの借用はしていないが、一方でMBR領域だけでまかなっている訳でもない。
実際MBRの後ろには使われていないセクターがいくつかある。ハードディスクの第1トラック(シリンダー0、ヘッド0)は先頭のセクター(シリンダー0、ヘッド0、セクター1 ここがMBR)以外、未使用で、パーティションは次の第2トラック(シリンダー0、ヘッド1)から割り当てられることになっている。MBMはこの第1トラックの未使用セクターを借用している。具体的な使い方は添付のドキュメントに書かれているので読んでほしい。多くのブートローダが用いてる手段である。
さらにグラフィックメニュー用には、ここでも足りなくなるので、別のシリンダーを一つ借用する。本来未使用のシリンダーを使うといいのだが、どこかのパーティションの最終シリンダーを選択しても構わないとなっている。通常はそこまでOSがデータとして使うことはないはずなので、問題ないということのようだ。ただしそのパーティションをデフラグなどすると、壊れるので、グラフィックメニューの再導入が必要となる。因みにグラフィックメニューが壊れても、起動には支障がない(元のテキストメニューがでるだけである)。
GRUBもフリーのローダとしては非常に高機能だ。チェーンロード機能は勿論のこと、多くのOSのカーネルをロードできるカーネルローダとして右に出るものはない。現在まだ正式リリースされていないが、殆ど問題なく使えるレベルである。MBMと比較してみると分かりやすいかもしれない。まずはMBMと比較したGRUBの利点だ。
次はMBMと比較した場合のGRUBの欠点である。
さて段落の構成上、成り行きからMBMとの比較を試みたが、UNIXのツールということで、LILOとの比較も面白いかもしれない。添付ドキュメントの歴史の項を読むと、そもそもGNU/Hurdから出発して、FreeBSDのローダを元に改良したとあるが、利用者の多いLILOと比較してみる。まずGRUBの利点である。
あと、MBMに対する利点にもある、OSブートステージへの介入も勿論LILOに対するアドバンテージの一つである。
LILOに対する欠点だが、実はあまりない。MBMとの比較にもあった、第2ハードディスク以降からのWindows9x系OSの起動がLILOは完璧だがGRUBはだめである。あと細かいことを言えば、アクティブ切り替えや隠しパーティションの設定が若干LILOの方がきめ細かくできるくらいだろうか。MBMとの比較でGRUB側の欠点として挙げたものは皆LILOにも当てはまるので、ここでLILOの利点にはならない。
まあ利点・欠点いろいろあるが、まずは良くも悪くもGRUBの最も大きな特徴である、OSのブートステージにまで介入する動きから見てみよう。
多くのサードパティのブートローダは、パーティションのブートセクターをロードして実行するまでしかしない。大抵パーティションのブートセクターにはOS独自のブートコードが書かれており、ここからOSのブートステージに入るため、パーティションのブートセクターのロードとそこへの制御移動を完了した時点で、ブートローダはその役目を終えるのが普通だ。この動作をチェーンロードと呼ぶと機能編で説明した。つまり通常のブートローダはチェーンロードしかしないのである。
NTのブートセクターがNTLDRを読んだり、DOSのブートセクターがIO.SYSを読んだりする段階は、既にOSブートステージであり、カーネルロードと呼ばれ、通常はサードパティのブートローダの関与することではない。このステージに関与するにはまずファイルシステムを理解する必要があり、更にOS固有のブートシーケンスを理解する必要もあるため、サードパティのブートローダにはとても難しいことになる。
GRUBは一部のOSだが、そのブートステージに関与する。UNIX育ちのソフトであるせいか、関与可能なものはUNIX-OSが多く、代表的なものとしてLinuxが挙げられる。
Linuxのカーネルロードを行うには、当然カーネルの起動の仕組みを知る必要がある。単にブートセクターをロードして、制御を移す、つまりチェーンロードの手法だけでは、カーネルの起動はできない。またLinuxは起動時にカーネルにパラメータを渡すことができるのを特徴にしている。シングルユーザモードで起動したり、ランレベルを変更したりするなど、起動時にパラメータを指定することで変更できる。このような起動は、カーネルにパラメータを渡す方法を知らなければならない。
LILOは当然Linuxの事実上の標準カーネルローダとして、このようなことが可能な訳だ。従って普通のサードパティのブートローダは、Linuxの起動にあたっては、LILOに制御を渡すだけとなる。つまりLILOの介在なしではLinuxの起動はできない。(あとLinuxのカーネルローダということでLOADLIN.EXEもこれが可能である)
サードパティのブートローダで今のところ、LILO並に柔軟なLinuxカーネルロードができるのはGRUBだけだ。GRUBはファイルシステムext2も知っているし、カーネルの起動の仕組みや、カーネルへのパラメータの渡し方も知っていて、LILOの手助けなくLinuxカーネルをロードできる。
またWindowsの起動のところでも説明したNTLDRによるWindowsNTとWindows9xのデュアルブートだが、これはNTLDRがファイル化したWindows9x用のブートセクターをロードすることで実現するという仕組みだった。このファイル化したブートセクターは、あくまでファイルシステム上の1ファイルとして存在しているので、ファイルシステムを知らないサードパティのブートローダがこれを直接ロードすることはできず、一旦NTのブートセクターをロードして、NTLDRに制御を渡し、その後でブートセクターファイルを読むという遠回りをせざるを得ない。
GRUBはここでも、FATなどのオーソドックスなMSのファイルシステムは知っているので、上記ブートセクターファイルを直接ロードすることができる。技術的な分類ではこれはチェーンロードなのだが、ファイルシステムを知る必要があるという点が、単なるチェーンロードと違うところである。
私が知っているGRUBのOSブートステージ介入動作はこれくらいなのだが、UNIX-OSに関してはもっといろいろある。興味のある人はドキュメントを読んで研究してみるといいだろう。
さて、GRUBの導入だが、理想的にはPC-UNIXを用意して、GRUBをmakeするのがいいのだが、make済みのバイナリやブートディスクイメージも配布されているので、簡単に導入の準備をすることができる。これについては「GRUBの導入準備」で説明する。
さて、準備が済んだら早速インストールだが、GRUBのインストールには次の方法がある。
上から順に下へいくに従って、難しくなる一方で、柔軟なインストールができる。実はどれを実行しても、実際は一番下のものが実行される。下から順に部分的に自動化されたものが、その上の方法だということになる。
GRUB Shellのsetupコマンドは、自動的にinstallコマンドを生成して実行する。インストール先がハードディスクである場合、自動的に適切なembedコマンドも実行される。同様にgrub-installシェルスクリプトは、適切なrootコマンドとsetupコマンドを生成して実行する。
通常の用途なら、だいたいgrub-installでいいはずだ。ただしシェルスクリプトということから、当然PC-UNIX上での実行になるので、Windows系オンリーな方など、実際導入準備でインストールフロッピーしか用意していない人は、2番を行わざるをえない。そういう方でも3番を行う必要のある場面は殆ど考えられない上、3番のinstallコマンドはとても高度なコマンドなので別途説明する。ここでは1番と2番だけの説明にしておく。
本来はgrub-installシェルスクリプトをなるべく使った方がいいようなのだが、私の個人的な好みと説明上都合がいいので、GRUB Shellを使った2番の方から説明する。ここでは、導入準備としてはGRUBプログラムがLinuxにインストールされている。しかし設定ファイルなどは今後Windowsからのメンテナンスも考えて、WindowsのFATパーティションに置くという前提で、またStage1 LoaderはMBRに置くものとして説明する。GRUBプログラムをフロッピーディスクに導入した場合でも、フロッピー起動して行うという点が違うだけで、大した違いはない。
よって導入準備では、ブートローダファイルを、第1ハードディスクの第1基本領域のFAT32領域のC:\boot\grubに配置する。
PC-UNIX上から行う場合は、まずプロンプトで、「grub」とタイプして「GRUB Shell」を起動する。そうすると「grub >」というプロンプトが表示されGRUB Shellのコマンドラインモードに入る。インストールフロッピーの場合は、起動すると自動的にこのモードになっているはずである。そもそもGRUBの基本はこれだ。GRUBは本来UNIX-Shellライクな対話型プログラムだ。インストール時も起動時もGRUBと対話をしながら、進めていくのが基本である。
しかしインストール時に、ここで打つコマンドは「root」コマンドと「setup」コマンドだけである。
[Minimal BASH-like line editiing is supported. For the first word, TAB
grub> setup (hd0)
grub> quit |
「root」コマンドでは、パラメータにブートローダファイルを配置したパーティションを指定する。パーティションの指定方法は、実はデバイスマップというファイルに指定すれば、そのOS固有の表現方法が使えるのだが、ここではGRUBの汎用的なデバイス表現方法で説明する。
()で囲んでまずはドライブ指定として、ハードディスクなら「hd」から、フロッピーなら「fd」から始まり、その次にBIOSが認識する順序を0を基点とした数値で指定する。ドライブ指定の後にカンマで区切って次にパーティションの番号である。これも0基点で第1基本領域が「0」、第2基本領域が「1」となる。論理領域は第1論理領域は「4」になる。
上記の例(hd0,0)とは、第1ハードディスクの第1基本領域を指定したことになる。Linuxでいうと/dev/hda1だね。因みにGRUBのデバイス名ではIDEハードディスクとSCSIハードディスクを区別しないので、あくまでそのハードディスクがBIOSから見て何番目かということだけ把握していればいい。SCSIハードディスクが2番目なら「(hd1)」となる。
実行するとルートになったパーティションのファイルシステム名やファイルタイプなどが表示される。意図したパーティションが選択できているか、これである程度確認できるだろう。
次の「setup」コマンドではパラメータにGRUBのインストール先デバイス、厳密にはGRUBの1st Stage Loaderのインストール先を指定する。第1ハードディスクのMBRの場合は、「(hd0)」となる。どこかのパーティションを指定してもいいし、フロッピーを指定しても構わない。
実行するとファイルの存在チェックが行われ、embedコマンドとinstallコマンドが自動的に生成、実行されている様子が表示される。
実はsetupコマンドには、ブートローダファイルを配置した場所を指定できる、もう一つのパラメータがある。つまりrootコマンドのパラメータとして指定したものを、setupコマンドの第2パラメータとして指定することで、rootコマンドを省略できるのだ。まあ大差ないので、どっちでもいいのだが、rootコマンドで一応そのファイルシステムが正しいことが確認できるので、どちらかというと紹介しているrootコマンドと併用する方が私はいいと思っている。
以上でMBRへのインストールは完了だ。実に簡単だね。最後に「quit」コマンドでGRUB Shellを抜けて、マシンをリブートするだけである。
さて次にgrub-installシェルスクリプトを使った場合だが、実行シーケンスは次のようになる。
grub-install [--root-directory=イメージディレクトリ] インストール先デバイス
もしルートパーティションと、ブートローダファイルのあるパーティションが同じなら、以下のようにインストール先を指定するたけである。
% grub-install /dev/hda |
因みにgrub-installシェルスクリプトでは、デバイスマップが自動的に作成されるので、OS固有のデバイス名(Linuxの/dev/hdaなど)が使える。勿論(hd0)などのGRUBのデバイス名も使える。ただしその場合はシングルクォーテーションで囲む。
% grub-install '(hd0)' |
ただし前例のようにルートパーティションとは別のパーティションをブートローダファイルのパーティションとして指定する場合は、そのパーティションをマウントした上で、その論理パスを「--root-directory」オプションで以下のように指定する。
% grub-install --root-directory=/mnt/win /dev/hda |
grub-installシェルスクリプトには「root-directory」オプションのほかにもオプションがあるが、ここで特に説明する必要のあるものはないだろう。興味のある人はGRUBのドキュメントを読んでほしい。とりあえずインストールについてはこれで完了だ。
さてインストールが完了したら、早速マシンをリブートして見ましょう。画面に以下のように、GRUBのプロンプトが表示されるはずである。
[Minimal BASH-like line editiing is supported. For the first word, TAB |
ここでコマンドを打って、起動するOSを指定する。えっ!そんな面倒くさいの? メニューは出ないの? と思った方がおられるかもしれない。実はメニューを出すには別途作業が必要である。しかしとにかく前述したように、GRUBは、起動時もこのGRUB Shellの「コマンドライン」インターフェースを使うのが基本であり、メニュー機能も「コマンドライン」インターフェースへの入力補助機能といった見方をすることもできる。
とは言っても、普通はメニュー機能を使うのが一般的だろう。したがって早速メニューの表示方法に入る。「/boot/grub/menu.lst」というファイル名の「設定ファイル」と呼ばれるファイル(名称からしてメニューリストファイルと呼んでもいいだろう)を用意して、ここにメニューに表示される項目を記述しておく。以下にその記述例を示す。
[設定ファイル「/boot/grub/menu.lst」の記述例]
timeout 30 color cyan/blue black/white default 0 title Turbo Linux 6.0 Workstation kernel (hd0,9)/boot/vmlinuz root=/dev/hde10 initrd (hd0,9)/boot/initrd title Linux Mandrake 7.1 kernel (hd0,10)/boot/vmlinuz root=/dev/hde11 initrd (hd0,10)/boot/initrd.img title Red Hat Linux 6.2J kernel (hd1,7)/boot/vmlinuz-2.2.14-5.0 root=/dev/hda8 initrd (hd1,7)/boot/initrd-2.2.14-5.0.img title LASER5 Linux 6.2 kernel (hd1,8)/boot/vmlinuz-2.2.14-12LL1 root=/dev/hda9 initrd (hd1,8)/boot/initrd-2.2.14-12LL1.img title Windows 2000 root (hd0,0) makeactive chainloader +1 title Windows 98 root (hd1,0) map (0x81) (0x80) map (0x80) (0x81) makeactive chainloader +1 title Master Boot Record root (hd0) chainloader +1 title Diskette root (fd0) chainloader +1 |
この例のようなmenu.lstがあると、前述のようなメニューが起動時に表示される。特にセットアップをし直すこともなく、この設定ファイルを用意するだけで、メニューが表示されうようになる。記述を変更した場合も特に再セットアップの必要はない。このあたりがLILOと違うところだね。WindowsNTのboot.iniのようなもので、実行時にダイナミックに読まれるからである。
設定ファイルの書き方は、GRUBのドキュメントを参照してもらいたいのだが、基本的で重要なものはここでも説明する。実は設定ファイルの各行は、それぞれコマンドになっていて、多くはGRUB Shellのコマンドにもなっている。つまりちょっとしたShellスクリプトのような働きをしていると考えてもらってもいいかもしれない。
ただしその性質上、設定ファイル専用のコマンド、逆にコマンドライン専用のコマンドもある。以下に主なコマンドを示す。
[設定ファイル、コマンドラインで共通に使えるコマンド]
[設定ファイル専用コマンド]
[コマンドライン専用コマンド]
一応これくらいのコマンドを理解していれば、とりあえず通常の利用ならばできる。実際のブートの手順を見てみよう。適当に設定ファイルを作って、マシンをブートしてみる。GRUBが実行され、以下のようなメインメニュー画面が表示される。
[GRUBのメインメニュー]
メニューに下に英語だが使い方が記述されているので迷うことはないと思うが、一応説明してみよう。
ここで、目的のOSを矢印キーで選択して「Enter」キーを押せば、簡単にそのOSを起動できる。通常はこのような使い方で殆ど問題はないだろう。しかしGRUBの真骨頂はここで起動方法を変更して起動できることである。
例えば、上の例で『LASER5 Linux』のカーネルをさっき変更してしまったので、名称が変わったとしよう。GRUBはジオメトリに依存しないので、カーネルの再構築でも名称が変更しない限り、問題ないが、名称が変わった場合は困る。通常は設定ファイルを書き換えるのだが、とりあえず今起動してしまいたいという場合に、ここで動的に起動方法を変更して起動することができる。
メインメニューで、変更したいエントリにカーソルを合わせて、「e」とタイプする。すると以下のようにそのエントリの内容が表示さた、「エントリ編集画面」が表示される。
[エントリ編集画面]
この画面での操作は少しだけVIライクだ。小文字の「o」で選択行の下に空行ができる。大文字の「O」で選択行の上に空行ができる。「d」で選択行を削除する。ただし各行の編集は「e」で「行編集画面」に移って行う。
[行編集画面]
|
編集をして「Enter」を押すと、編集を反映して「エントリ編集画面」に戻る。また「ESC」を押すと、編集を破棄して「エントリ編集画面」に戻る。
エントリ編集画面に戻り、編集が正しいことを確認したら、ここで「b」とタイプしてブートする。「ESC」で更にメインメニューに戻るが、その場合、全ての編集が破棄されるので注意してほしい。編集を有効にしてブートしたい場合は、必ずエントリ編集画面から「b」をタイプしてブートする。
逆に「ESC」を押していけば完全に最初の状態に戻ることが保証されている。ドツボにはまることはない。
エントリの編集は前述の例のような場合の他、Linuxでパラメータを変更または追加して起動したい場合などにも使う。前述の例は比較的頻度が低いと思われるが、Linuxのパラメータ変更起動は結構頻繁に行うだろう。
さあ、ここまで説明すれば、殆ど迷うことはないだろう。これ以上の詳しい使い方は、GRUBのドキュメントを読むか、「GRUBの詳細」をみてほしい。
extIPL(Extended-IPL)は、MBMやGRUBとはまた違った魅力のあるブートローダだ。分類的にはMBMと同じ典型的なチェーンローダである。フリーツールの場合、ソース公開は決して珍しくないが、extIPLはDOS版ソースも用意されていて、Windowsな人でも自分でmakeできるところがいいね。
Version5では、MBR446bytesの脱却を図って、メニューの導入、待望のLBA対応と、意欲的な改良が行われ、通常の用途では全く不足のないものに仕上がっている。
また今回の改良で、第2ハードディスク以降からの起動も見直された。第2ハードディスク以降からの起動は「機能編」でも述べているように、OS側の問題があって難しく、MSのOSでも完全に起動できるブートローダは殆どない中、このextIPLとMBMとLILOとBootItだけが、今のところ現在発売されているすべてのWindows系OSを第2ハードディスク以降から起動することができる。以下に主な機能を挙げる。
「機能編」で挙げた項目としては「隠しパーティション機能」がないのが残念だが、他は全て高レベルでクリアしている。特に前述のように第2ハードディスク以降からの起動では、LILOやMBMと共にトップレベルだ。またアクティブ切り替えも起動時に切り替えるか、そのままかを選択できるのは実は珍しい機能で結構便利である。
さて早速インストールしてみるが、インストールが容易及び柔軟なのもextIPLの特徴だ。PC UNIXユーザ用にはソースが公開されているので、これを自分のメインのプラットフォームでmakeしてインストーラを作る。またDOS、Windows用にもソースが公開されており、make可能だが、多くのmakeなど無縁の人のためにDOSのバイナリインストーラも用意してあるので、Windows95/98のDOS窓(純粋なDOSコマンドなので、MEのDOS窓や、NT/2000のコマンドプロンプトではできない)や起動ディスクなどから実行してインストールする。インストールは簡単なので、付属のドキュメントを読んでほしい。コマンド一つ叩けばいいだけである。
テスト用にフロッピーにインストールすることも可能だが、基本は第1ハードディスクのMBRにインストールすることになるだろう。
次に使い方だが、これも直感的で、添付のドキュメントを読めば、特に説明するほどでもないのだが、せっかくなので、ここで説明する。フロッピー起動の場合もハードディスク起動の場合もほぼ同じである。ここでは通常のハードディスクのMBRにインストールした場合で説明する。
まずPCを起動をするとextIPLが実行され、以下のようにカウントダウンを始める。
[extIPLの起動]
extIPL . . 14 |
このあたりはこのツールの一つの特徴で、このまま何もしないと、IBMオリジナルブートストラップローダのように単にアクティブな基本領域からOSを起動する。ここでスペースキーなどを押すと、初めて次のようなメニューが表示される。
[extIPLメニュー(起動直後)]
上には、現在のドライブの情報が表示される。最初は第1ハードディスクドライブとなる。その下の左側に当該ドライブのパーティションの情報が表示されている。パーティションの番号とそのパーティションのパーティションタイプが表示される。例では第1パーティションに「0B(FAT32)」が、第2パーティションには「0F(拡張パーティション(LBA))」が、第3パーティションには「1F(未知の領域)」が、第4パーティションは存在していない。
右側には、主要な動作(アクション)のリストがある。メニューに動作リストがあるローダは比較的珍しい。リストアップされる動作は、「Change target Drive」(対象ハードディスクドライブを変更する)、「Return to MBR」(MBRに戻る)(上の例では表示されていないが後述する)、「Mark active and Boot」(対象領域をアクティブにしてブートする)、「Boot」(対象領域をブートする)の4つである。矢印キーを使って、動作リストへ移ると、右側のパーティションリストで最後にフォーカスをあてていたパーティションが水色になる。これが対象領域となる。
[動作リストへのカーソル移動]
「Change target Drive」アクションは、当たり前だが、BIOSで認識できるハードディスクが複数ある場合に表示される。BIOSが認識する順序に従って、巡回する形で変更されていく。
アクション「Mark active and Boot」と「Boot」に関しては、右側で選択されている(水色になっている)対象領域に対して動作する。
左側のパーティションリストで、対象パーティションを選択して、右側の動作リストでアクションを行うというのが、基本的な動作となるが、すべてのアクションにはキーがアサインされている。キーアサインは以下のとおりである。
[リストアップアクションのキーアサイン]
アクション | キーアサイン |
Change target Drive | 0 |
Return to MBR | BackSpace |
Mark active and Boot | End |
Boot | Enter |
慣れてくれば、キー操作の方が使い勝手がいいだろう。これらの説明は「?」キーで左側リストに表示される。またリストアップアクションの他にも、いくつか利用可能なアクションがある。以下がそれである。
[その他のアクションのキーアサイン]
アクション | キーアサイン |
拡張領域内に入る | Space |
タイムアウトの変更 | Alt+T |
表示名称の変更 | Alt+N |
設定のセーブ | Alt+S |
それぞれのアクションは後述するが、このうち「Space」キーだけは、前述の4つの主要アクションと共に「?」キーを押したときの説明に表示される。
さてextIPLの特徴の一つである、論理領域からの起動だが、かなりユニークな起動方式をとる。基本的には拡張領域をブートターゲットとして、中の論理領域からブートフラグのたった領域を探して、自動起動する。本来論理領域はアクティブにする(ブートフラグをたてる)意味がないので、普通は論理領域にブートフラグを立てることがないだろうし、DOSのFDISKなどでは立てることができない。またLinuxのfdiskなどでは、論理領域にブートフラグを立てることができるが、extIPLが自動起動するためのブートフラグの立て方は非常に特殊である。
目的の論理領域だけでなく、そこに至る全ての拡張パーティションブートレコードにも立てなければいけない。通常このようなことのできるツールはない。従ってextIPLで論理領域の自動起動を行うにはアクション「Mark active and Boot」を使って論理領域をアクティブにする必要がある。こうすることでその論理領域までの全ての拡張パーティションブートレコードをアクティブにでき、次回から自動起動できる。因みにこの自動起動は、拡張領域をブートターゲットとした場合だけでなく、後述するタイムアウトによる自動起動の場合でも有効である。
勿論手動起動も可能だ。その場合、一旦拡張領域内に入る。メニューで拡張領域にフォーカスをあてて、「Space」キーを押す。すると以下のような論理領域のメニューになる。
[拡張領域内部の論理領域メニュー]
パーティションリストには全ての論理領域が表示される。上の方には、「(Inside....」との表示が出て、現在パーティションテーブル上の何番目かにある拡張領域の中に入っていることが分かる。1画面で表示できる論理領域数は7つまでで、それを超える場合は、カーソル移動で縦スクロールして表示する。ただし最高16個までしか表示できない。起動方法(操作やキーアサイン)は、MBRのリストと同じである。
拡張領域から出る、というか元のMBRのリストに戻るのが、「Return to MBR」アクション(「BackSpace」キー)だ。
あと付加機能として、デフォルトエントリが起動するタイムアウト時間の設定がある。「Alt+T」キーで変更できる。以下のようなプロンプトが出るので、0から999(単位秒)までの数値を入力して、「Enter」を押す。
[デフォルト起動タイムアウト時間の設定]
Time to pause before boot: 15 -> _ |
ただタイムアウト時間が過ぎた時に起動されるデフォルトエントリに対する考えがextIPLではちょっとユニークである。多くのローダでは、任意にデフォルトを設定できるか、前回起動したものがデフォルトになることが多いと思うが、extIPLではあくまでブートフラグが立った領域をデフォルトとする。IBMオリジナルブートストラップローダと基本的には同じだという訳だ。ただしextIPLはたとえ論理領域でも、ブートフラグが立っていれば、デフォルトとできるあたりが非常にユニークになっている。
また各エントリの表示名称を変更できる。デフォルトでは、extIPL内部で持っているパーティションタイプとの変換表から、主なパーティションタイプの場合、名称が表示される。内部の変換表にないものは、「unknown」となる。ただしこれはあくまでパーティションタイプ名なので、通常は「FAT32」などのファイルシステム名となる。ここはやはりOSの名称を表示したいと思うだろうから、任意の20文字までの表示名称に変更可能としている。
変更したいエントリを選択した状態で、「Alt+N」キーを押すと、以下のような、変更を促すプロンプトが出るので、任意の文字列を入力する。
[表示名称の変更]
Enter Name (20 chars max): Windows 98 |
しかしちょっと注意がいるのは、この表示名称の変更は、デフォルトでは第1ハードディスクにのみ有効だということである。つまりextIPLがインストールされている第1ハードディスクにしか適用されず、第2ハードディスク以降は表示名称を変更できない。これは、この情報を各ハードディスクのMBRに続く第2セクター以降に記録するため、たとえば第2ハードディスクには別のブートローダをインストールしていた場合などに、そのブートローダの固有情報を破壊してしまうことが多いため、あえてデフォルトではこの機能を外してある。
ただし、これはextIPLのインストーラをmakeする時のオプションで指定すれば、第2ハードディスク以降も表示名称の変更を有効にすることができる。もし他のブートローダとの併用をすることがないか、たとえしていても、そのローダが第2セクター以降を使っていないことが明らかな場合、ちょっと手間だが、自分でmakeし直すといいだろう。第2ハードディスク以降の表示名称の変更、保存を有効にするmakeオプションについては、添付のドキュメント及びMakefileを参照してほしい。
またこれら、「Alt」キーを使った設定はすべて、「Alt+S」キーで保存しないといけない。ブートする前、また別のハードディスクに移る前に必ずセーブしてほしい。
これで大抵の用途は問題なく使用できると思う。あとの更に詳しい使い方はツールのドキュメントを参照してほしい。
XOSLは基本的にはチェーンローダだが、MBR起動ができたり、電源断ができたりと、結構細かな機能が豊富にある。しかし何といってもこのローダの特徴は、その卓越した表示能力と、とかく排他的な性質が強いブートローダにあっては珍しい他のローダとの多彩な連携機能だろう。
表示能力としては、1600x1200というWindows並みの高解像度で表示が可能だ。だから何がどれほど便利かということはないのだが、マウスも使えるので、下図のようなメインメニューにしても、まるでWindowsを扱っているかのような気分で、とてもブートローダの画面とは思えない。
[XOSLのメインメニュー]
各種設定も、起動時のまだなんのOSの起動もされていないときから、Windows上のアプリケーションの感覚で操作できる。
[設定メニュー例]
単に解像度だけでなく、Windowsの「デザイン」のようにいろいろなカラーパターンが用意されている。また現在は決まった壁紙しか選べないが、いずれカスタマイズできるようになるだろう。
ただしこれだけの機能があるので、データ量が多いため、領域としてFATパーティション(DOS Partition)、または独自の領域(Dedication Partition)を必要とする。独自領域を用意するのはマルチブートをしようとする人には、ちょっとつらいと思うので、FATパーティションを持っていない場合、導入しにくいかもしれない。FATパーティションを選択した場合は、データはすべてそのパーティション(ドライブ)の直下に置かれる。データは壊さないように気をつけよう。
インストールは配布のインストーラがDOSコマンドなので、これをDOSの起動ディスクに入れて、簡単に実行できる。メニュー形式で、その指示に従って行う。インストール先などの選択フェーズもある。
また使い方については、添付のドキュメントも英語とはいえ、非常に豊富で実際使ってみても直感的で迷うことも殆どないと思うので細かくは説明しない。ただしもう一つの特徴である連携機能には触れておこう。
まず連携の目玉として、直接他のブートローダやパーティショニングツールを起動する機能がある。XOSLのインストール時に選択できるのだが、後述するSmart Boot Manager(SBM)と、パーティション操作ツールであるRanish Partition Manager(RPM)との連携機能が導入できる。デフォルトでは導入するようになっているので、是非導入しよう。
SBMの持つ殆どの機能を既にXOSLは持っているのだが、唯一SBMのCD-ROM起動がXOSLにはないので、この機能が使えるようになる。SBMは通常はXOSL同様に第1ハードディスクのMBRに導入するのだが、XOSLとの連携の場合は、共存可能な領域にインストールされる。
一方RPMは、元々パーティション操作ツールとそのおまけのブートマネージャの機能があるのだが、XOSLと連携するのはパーティション操作機能だけとなる。パーティション操作の画面からRPMのブートマネージャをインストールすることができるが、SBMの場合と違って、この場合排他的なインストールとなってしまうので、やめよう。XOSLに付属のRPMのブートマネージャは、通常のRPMのブートマネージャとは違い、全く取るに足らないローダなので、導入する必要はない。パーティション操作機能は、PartitionMagicのようなことは到底できないが、それなりに便利な機能もあるので、導入して損はないだろう。
SBMはメニュー候補リストの中にあるから、使用したければこれをメインメニューに登録する。この登録したメニューをブート時に選択するとSBMに移る。一方RPMの方は、デフォルトでホットキーとして、「Cntl-P」が割り当てられており、このキーを打鍵すると起動する。このホットキーは変更可能である。
またもう一つの連携機能としては、XOSLでは第2ハードディスク以降のMBR起動が可能なので、第2ハードディスク以降のMBRに他のローダをインストールしておけば、これを呼び出すことができる。もっともこの機能は、第1ハードディスク以外のMBRに置かれた状態でも正常に動作するブートローダでなければならないのだが、今のところこのような場所でも動作するローダはext-IPLとGRUBくらいである。
幸いext-IPLにはXOSLにできないことが一つできるから、この連携は意味を持つ。XOSLは非常に多機能だが、惜しむらくは第2ハードディスク以降のMSのOSの起動でWindows9x系(MEも含む)が不安定である。ファイルシステムなどがすべてMS-DOS互換モードになってしまう。見た目にはあまり気にならないことだが、本当に実験OS環境くらいにしかできない。(因みにWindowsNT系は問題なく起動できる) そこで、第2ハードディスク以降の起動が完璧なext-IPLとの連携が意味を持つ。こうすることでXOSLをメインのローダとして、ext-IPLのサブローダとして使うことにより、構成の自由度が格段に増すことになる。
最後にXOSLの連携機能として、非常にユニークなのが次のローダにキーストロークを渡せることである。
チェーンローダは通常、カーネルのロードはできないので、次段としてカーネルローダが実行される訳だが、その次段のカーネルローダがLILOやNTLDRなどの選択型ブートローダの場合、また選択フェーズが出てくることになる。ここでまたエントリをキー入力したり、カーソルキーで移動して、Enterキーで確定するなどの作業が必要となる。勿論このようなことをしたくない場合は次段のローダはデフォルトをタイムアウトなしで起動するように設定しておけば、全くそんなローダが無かったかのように扱える訳だが、これはこれでせっかくのそのローダの選択機能が台無しになってしまう。
そこで次段のローダにそのローダで行うキーストロークを渡すことができれば、当該ローダの選択機能を利用しつつ、しかもXOSLからは、まるで直接起動しているかのようにできる訳だ。これは「boot items configuration」画面のキータブで設定できる。
[Additional Keysの設定]
※注 画面では「Additional keys」となっているが、バージョンによっては「Boot keys」となっているものもある。
各ブートアイテムを選択した上で、「keys」タブをクリックして、「Additional Keys」のテキストボックスにそのエントリがブートされた時に次段のローダなどに渡したい「キーストローク」を打鍵して入力する。特殊キーは以下の表に示す略語がテキストボックスに入力される。
略語 |
キー名 |
略語 |
キー名 |
略語 |
キー名 |
esc |
Escape |
cd |
Cursor Down |
hm |
Home |
bs |
Backspace |
cl |
Cursor Left |
end |
End |
tab |
Tab |
cr |
Cursor Right |
pu |
Page Up |
ret |
Enter |
ins |
Insert |
pd |
Page Down |
cu |
Cursor Up |
del |
Delete |
k+ |
Keypad + |
「Backspace」、「Tab」、「Shift-Tab」、「Escape」の4キーは、上記ダイアログの操作キーとしてトラップされて、上記テキストボックスに入力できないため、入力補助として下にボタンが用意されているから、これを使って入力する。
この機能、使ってみると結構便利だ。ローダの連携機能の中でも、カーネルローダとの連携はチェーンローダにとって欠かせないのでこのような機能は役に立つ。ただし受ける側のローダがキーストロークを受け取れない場合もあるので注意が必要である。ドキュメントにもあるが、LILOはマップインストーラを「-DNODRAIN」オプションを付けてmakeしないとキーバッファを受け取れないので、必ずこのオプション付で再makeして、LILOを作り直してほしい。
このツール独自の特徴としては、ATAPIのCD-ROMドライブからならばブータブルCDを起動できるというものがある。それ以外は特に際立った特長はないのだが、細かな機能で可能なことが多く、スペック表で「○」の数がどれくらい多いかを競わせるとかなり上位にくるツールである。
メニューをグラフィック化したりなどといった遊び心のある機能などはないが、実用的な機能は実に豊富で、チェーンローダとしては最高峰だと思う。その割りにデータ量がコンパクトなため、一切特別な領域を必要としない(多くのブートローダ同様、MBRの後続領域は使用する)ので、導入の制約もなく、動作もきびきびとしている。機能と軽さのバランスは抜群だと思う。実用派の人には一番いいローダかもしれない。
ただし、やはりXOSL同様、第2ハードディスク以降の起動でWindows9x系がMS-DOS互換モードになってしまうという問題がある。しかし、幸いSBMはXOSL同様MBR起動が可能なので、XOSLのところで説明したext-IPLとの連携が可能である。
メニューは以下のような、いかにも高機能そうなものが表示される。
[SBMのメインメニュー]
ドキュメントも英語だが、豊富で分かりやすいく、実行時のヘルプなども非常に豊富なので、困ることはないだろう。だから使い方をここで細かくは説明しない。
インストールも、DOSコマンドのインストーラが配布されているので、DOSの起動ディスクに入れて、コマンド一発で導入が可能だ。また英語以外にもかなり多くの言語のものがある(残念ながら日本語版はないが)ので、スペイン語やフランス語の方が得意だという人は、それらを選択してみても(インストール時に選択可能)いいだろう。
基本的にはLinuxのカーネルローダであり、他のフリーローダとは毛色が違うし、これまでのページで事実上散々解説してきたが、一応フリーで入手可能なブートローダとして、ここでもあらためて解説しておく。
LILOに限らず、Linuxに関しては多くの方の努力によって、非常に沢山のドキュメントが用意されており、また日本語にも翻訳されている。そうしたドキュメントを読み漁ればLILOのエキスパートになれる。
しかし現状ではまだまだ体系化されているとは言えない。一体どこから読んでいけばいいのか。どういう順序で勉強していけばいいのか、困惑されている方も多いだろう。とにかくこのページを読みなさいというページでもあればいいのだが、現在は情報が散在している状態である。
しかし散在に関しては問題ない。そもそもWebは世の中に散在した情報をあなたのパソコンに集めてくることができる訳で、その機能があるが故、ここまで発展してきた訳だ。ただ現在ある情報の多くは、HTML化されているとはいえ、テキストベースで初心者には読みにくいものも多いと思う。
このページの試みは散在した情報にここから一気に辿れ(しかも体系的に)、テキストだけではわかりにくいものは私が自ら図での説明を加え、初心者にはやさしく、上級者には物足りなくないような、情報の提供をするのが目的である。
このコースを終えてLILOのエキスパートになったら、今度はあなたが、解説のページを作成してみるのはどうだろうか。